/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2023-04-23
 * Time:20:08
 */
import java.util.Arrays;

/**
 * Jz21调整数组顺序使奇数位于偶数前面(一)
 */

public class reOrderArray {
    public static void main(String[] args) {
        // 测试用例1
        int[] nums1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        reorder(nums1);
        System.out.println("调整后数组1：" + Arrays.toString(nums1));

//        // 测试用例2
//        int[] nums2 = {0, 0, 0, 0, 0};
//        reorder(nums2);
//        System.out.println("调整后数组2：" + Arrays.toString(nums2));
//
//        // 测试用例3
//        int[] nums3 = {1, 3, 5, 7, 9};
//        reorder(nums3);
//        System.out.println("调整后数组3：" + Arrays.toString(nums3));
    }
    public static int[] reorder (int[] array) {
        // write code here
        //
//        int[] newarray = new int[array.length * 2];
//        int index = 0;
//        for (int i = 0; i < newarray.length; i++) {
//            newarray[i] = array[index++];
//            if (index == array.length){
//                index = 0;
//            }
//        }
//        for (int i = 0; i < array.length; i++) {
//            if (newarray[i] % 2 == 0){
//                newarray[i] = 0;
//            }
//        }
//        for (int i = array.length; i < newarray.length; i++) {
//            if (newarray[i] % 2 != 0){
//                newarray[i] = 0;
//            }
//        }
//        int newindex = 0;
//        for (int i = 0; i < newarray.length; i++) {
//            if (newarray[i] != 0){
//                array[newindex++] = newarray[i];
//            }
//        }
//        return array;
        // write code here
        int len = array.length;
        //辅助数组
        int [] nums = new int[len];
        //双指针，两边同时进行
        int left = 0;
        int right = len -1;
        int temp_left = left;   //辅助数组起始位置下标
        int temp_right = right; //辅助数组最大长度位置下标
        //当左指针遍历到数组最大长度时，右指针遍历到起始位置，循环停止
        while(left<len && right >=0){
            //奇数
            if(array[left] % 2 ==1){
                nums[temp_left] = array[left];
                temp_left++;
            }
            left++; //无论是否找到奇数，左指针每次都会向右移动一次
            //偶数
            if(array[right] % 2 ==0){
                nums[temp_right] = array[right];
                temp_right--;
            }
            right--; //无论是否找到偶数，右指针每次都会向左移动一次
        }
        return nums;
    }
}
